package com.nancy.java_design.visitor.demo1;

/**
 * 访问者模式
 *    访问者模式（Visitor Pattern）是将数据结构与数据操作分离的方法。
 *    它包含一个访问者类以及一个或多个元素类。
 *    访问者类可以访问元素类的操作，但元素类不能访问访问者的操作。
 *    访问者模式通常用于将数据结构与算法解耦，使得二者独立变化。
 *    访问者模式是一种对象行为型模式。
 *    访问者模式结构
 *    1.Visitor（抽象访问者）：它定义了一个visit操作，其参数类型声明为ConcreteElement。
 *    2.ConcreteVisitor（具体访问者）：它实现了抽象访问者中声明的所有visit操作，每个操作实现都仅调用其对应元素。
 *    3.Element（抽象元素）：它定义了一个accept操作，其参数类型为Visitor。
 *    4.ConcreteElement（具体元素）：它实现了抽象元素中声明的accept操作。
 *    5.ObjectStructure（结构对象）：它是一个包含元素的对象，可以遍历它的所有元素从而在遍历过程中访问其对应的访问者。
 *    访问者模式类图
 *    ![](https://img-blog.csdnimg.cn/20190531164738597.png?x-oss-process
 *    =image)
 *    抽象数据角色
 */
public interface Animal {
    void accept(Visitor visitor);
}
